////////////////////////////////////////////////////////////
// Headers
////////////////////////////////////////////////////////////
#include "AIEntity.hpp"

#include <SmegTools/Debug/DebugNew.hpp>

namespace smeg {
    namespace ai {
              
////////////////////////////////////////////////////////////
/// Default Constructor
////////////////////////////////////////////////////////////
AIEntity::AIEntity() :
    core::MovableEntity(),
    m_SteeringManager()
{
    m_SteeringManager.SetEntity( this );
}
    
////////////////////////////////////////////////////////////
/// Constructor with a texture
////////////////////////////////////////////////////////////
AIEntity::AIEntity( const sf::Texture* _pTexture ) :
    core::MovableEntity( _pTexture ),
    m_SteeringManager()
{
    m_SteeringManager.SetEntity( this );
}
    
////////////////////////////////////////////////////////////
/// Constructor with a texture and a rectangle
////////////////////////////////////////////////////////////
AIEntity::AIEntity( const sf::Texture* _pTexture, const sf::IntRect& _Rectangle ) :
    core::MovableEntity( _pTexture, _Rectangle ),
    m_SteeringManager()
{
    m_SteeringManager.SetEntity( this );
}
    
////////////////////////////////////////////////////////////
/// Copy Constructor
////////////////////////////////////////////////////////////
AIEntity::AIEntity( const AIEntity& _Copy ) :
    core::MovableEntity( _Copy ),
    m_SteeringManager( _Copy.m_SteeringManager )
{
    m_SteeringManager.SetEntity( this );
}
    
////////////////////////////////////////////////////////////
/// Destructor
////////////////////////////////////////////////////////////
AIEntity::~AIEntity()
{
}

////////////////////////////////////////////////////////////
/// Update the entity
////////////////////////////////////////////////////////////
void AIEntity::Update( float _fDeltaTime ) {
    const sf::Vector2f& steering = m_SteeringManager.Compute();
    AddVelocity( steering / m_fMass );

    MovableEntity::Update( _fDeltaTime );
}

#ifdef _DEBUG
void AIEntity::DebugRender( sf::RenderWindow* _pRenderWindow, const sf::Color& _Color ) const {    
    m_SteeringManager.DebugRender( _pRenderWindow );
}
#endif // _DEBUG

    } // namespace ai
} // namespace smeg